package L01;
//内存可见性  volatile  该关键字不能保证原子性
//synchronized  可以保证原子性和内存可见性

import java.util.Scanner;

public class T17 {
    //public static volatile int isQuit=0;
    public static  int isQuit=0;

    public static void main (String[] args) {
        Thread t1=new Thread (()->{
            while(isQuit==0){
                //循环体为空，则循环执行的速度快
                //isQuit==0  要进行load  和cmp  操作
                //load操作很耗费时间，为了优化执行速度，编译器第一次从内存读取后，以后都从寄存器读取
                //加入volatile会让编译器对isQuit进行操作时，不会进行优化来加快运行速度
                try {
                    Thread.sleep (1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException (e);
                }
                //加入sleep之后，while（）运行速度变慢，不会触发load的优化，不会出现内存可见性问题
            }
            System.out.println ("线程t1结束");
        });
        t1.start ();

        Thread t2=new Thread (()->{
            Scanner scanner=new Scanner (System.in);
            System.out.println ("请输入isQuit的值：");
            isQuit=scanner.nextInt ();
        });
        t2.start ();
    }
}
